The Quarterdeck Expanded Memory Manager-386 (QEMM-386) is a power- ful, high performance memory manager and software control program for 80386 PCs and P5/2s. QEMM-386 enhances the utilization of your 386 PC's memory by providing expanded, extended, and high (640K-1 024K) memory management. And, as an 80386 control program, QEMM-386 taps into 80386 features important for multitasking and program protection by Quarterdeck's multitasking environment, DESQview 2. QEMM-386's expanded memory management capability enablcs you to run expanded memory programs, such as Paradox 3, Framework 11 and 111, Microsoft Windows 286 v2, Aldus Pagemaker, and 1-2-3 Release 2 without having to buy a special expanded memory board. QEMM-386 is compatible with all three expanded memory specifications (EMS 3.2, EMS 4, and EEMS). It is also QEMM-386's expanded memory management capability that gives you use of your PC's high memory. I ligh memory (the memory addresses be- tween 640K and 1024K) has been traditionally reserved by IBM for use by your system hardware. As DOS programs have become larger, and as you have need to run several programs at once, high memory has increased in im- portance. The reason is that there are often more memory addresses rescrved for system hardware than are actually being used. So there are precious avail- able memory addresses, usable by DOS, waiting to be used! QEMM-386 fills unused memory addresses in your PC's high memory with expanded memory--so that you can then load TSR's, device drivers (such as networks), and DOS resources in this memory. Depending on your PC and the number of hardware add-ons you have, QEMM-386 makes anywllere from 30-130K more memory available for you to use. Additionally, if your PC is either a Compaq configured with top memory or if it has Chips & Technologies shadow RAM, QEMM-386 detects this memory and makes it usable in the same ways it uses extended memory. If you need memory more than you need EGA or VGA graphics, QEMM-386 can give you an additional 96K of memory--that can be used by your DOS program. It does that by making the memory reserved for your EGA or VGA adapter available to your DOS program. The caveat is that while you are using this memory, you can't be doing graphics. But, QEMM-386 makes it easy for you to use or not use this memory. For P5/2 computers and other computers using microchanllel architecture, QEMM-386 includes an "Adapter Description Library" (ADL), a record of many peripheral hardware devices for computers using microchannel ar- chitecture. QEMM-386 uses this information to insure a maximum amount of safely accessible high memory with P5/2 computers. QEMM-386 is also an extended memory manager, compatible with the XMS extended memory specification, specified by Microsoft and used in Windo~s 286 v2. 3 CHAPTER 1: INTRODUCTION QEMM-386 is also compatible with DOS extended programs (such as Paradox 386,1-2-3 Release 3, Oracle Professional, IBM Interleaf). A DOS ex- tended program is a special DOS program that runs in your PC's protected mode--but fools DOS into thinking that it is just a normal 640K program. QEMM-386 does require that DOS Extended programs be compatible with the Quarterdeck/Phar Lap Virtual Control Program Interface (VCPI) specifica- tion which specifies how 80386 control programs and DOS Extenders com- municate to each other. As an 80386 control program QEMM-386 takes advantage of the 80386's vir- tual 8086 mode to add screen virtualization and program protection to Quarterdeck DESQview 2's multitasking capabilities. DESQview is a multi- tasking, windowing control program that lets you run multiple DOS programs (1-2-3, Word, Windows 286, Excel, AutoCAD) simultaneously. Through software in both QEMM-386 and DESQview 2, whicl- controls the 80386 processor, DESQview can run misbehaved (i.e. text or graphics programs which write directly to the screen) DOS programs in backgroUnd, display each program running in a small window on tl-e screen, and protect the system against bugs in programs. In addition, QEMM-386 enables DESQview to multitask DOS extended and normal DOS programs simul- taneously. The bundle of the two products, DESQview 2 and QEMM-386, is known as DESQview 386. Below is a summary of QEMM-386's features. QEMM-386: U Is an expanded memory manager, compatible with EMS 3.2, EEMS, and EMS 4. O Is an extended memory manager, compatible with XMS. QEMM-386 sup- ports all three forms of the specification--high memory area (HMA), upper memory blocks (UMB), and extended memory blocks (EMB). O Is compatible with the Quarterdeck/Phar Lap Virtual Control Progralll Interface (VCPI) interface, which specifies how DOS Extended programs interface with 80386 control programs. O Is a high memory manager, which enables you to run devicc drivers, TSR's and DOS resources (such as FILES, BUFFERS, etc.) specified in your PC's CONFIG.SYS and AUTOEXEC.BAT fik~s, in high memory. O Detects Chips & Technologies shadow RAM and uses tl-is memory in tlle same ways it uses extended memory. O Detects Compaq computer "top memory" and uses tl-is memory in the same ways it uses extended memory. O Lets you specify how much memory is to be used for expanded and ex- tended memory. 4 CHAPTER 1: INTRODUCTION O Fills out any missing memory in your PC's 0-640K conventional memory area, and in the 640K-1024K high memory area. QEMM-386 can fill areas as small as 4K with memory. O Incorporates an Adapter Description Library, a record of RAM and ROM addresses used by microchannel peripheral adapter cards, to resolve memory addressing conflicts of microchannel architecture peripheral devices. O Automatically detects the speed of high memory and uses fast memory whenever possible. O Optionally maps slow ROM code into fast RAM. O Supports EMS4 real alternate maps. O Automatically controls Direct Memory Access (DMA) of all mapped memory. O Enables a user, willing to forego the enhanced graphics capabilities per- mitted by EGA and VGA adapter cards, to increase the memory used by DOS by 96K--thus making as much as 736K of memory, instead of the standard 640K, available to DOS. O Provides extensive reporting and analytical information about the first megabyte of memory. O Transforms Quarterdeck's DESQview 2.2 into an 80386 control program-- capable of running multiple DOS programs simultaneously with multi- ple DOS extended programs. This combination of QEMM-386 and DESQview 2.2 is called DESQview 386. QEMM-386 is a very powerful program. Because of this power, QEMM-386 is very technical in nature. Knowing this, we've tried to make it as easy as pos- sible for non-technical users to install and optimally configure their memory. As a result, most users need only to know the command, INSTALL. QEMM- 386's installation program looks at your PC and sets whatever command line parameters it needs to transform your memory into expanded memory. Your PC is ready to be used. However, QEMM-386 goes one step further. QEMM-386 also has an program, called Optimize, which can automatically alter your AUTOEXEC.BAT and CONFIG.SYS files to load programs into the optimal regions of high memory. For the PC guru, who likes to fine-tune a PC to get optimum utilization of memory, QEMM-386 has some very powerful features. QEMM-386 watches your memory to determine what memory is accessed by programs. QEMM- 386 then analyzes memory and recommends what additional high memory can be used to load TSRs, drivers etc. "Analyze" is for the brave, and does come with warnings to be careful. 5 CHAPTER 1: INTRODUCTION Built-in to QEMM-386 is a comprehensive reporting facility. Using these reports, you can display status information about QEMM-386 and maps of the first megabyte of memory. One map shows you the first megabyte as QEMM- 386 sees it; another shows a map of what memory your programs have accessed; a third map shows QEMM-386's analysis of what high memory can be used or not. The information displayed is the same informa- tion that is provided by Quarterdeck's memory analysis and reporting pro- gram, Manifest. nual QEMM-386 is really a set of programs that help you get the best utilization of your memory. If you are a non-technical PC user, there is no need to read any further than Chapter 2, Installation. The remaining chapters of the manual are intended as references and should be used if you have a problem in in- stalling QEMM-386 or if you wish to fine-tune QEMM-386. The QEMM-386 manual is organized as follows: O Chapter 2, Installation describes how to install QEMM-386 and use the QEMM-386 Optimize program. O Chapter 3, The QEMM.SYS Program lists the QEMM-386 command line parameters used to set up your PC's memory. U Chapter 4, The QEMM.COM Program describes how to change QEMM's current state (ON, OFF, or AUTO), and describes the QEMM memory reports. O Chapter 5, The LOADHI Programs describes how to load TSR's and device drivers in high memory. O Chapter 6, DOS Resources Programs describes the programs used to load DOS BUFFERS, FILES, FCBS, and LASTDRIVE in high memory. O Chapter 7, The VIDRAM Program describes how to use the EGA/VGA video memory to run programs. O Chapter 8, Other QEMM-386 I'rograms describes EMS2EXT, which lets you specify how much memory to set as expanded and extended memory, and EMS, which lets the technical user view and manipulate EMS handles. O The appendices cover four topics: Appendix A: Troubleshooting, Appen- dix B: Making a Boot Disk, Appendix C: Creating a Pure Environment, and Appendix D: Modifying the MCA.ADL File. 6 CHAPTER 1: INTRODUCTION You install QEMM-386 by running the QEMM installation program, INSTALL. You should also use INSTALL if you are installing an upgrade of QEMM-386. If you have a new 80386 PC, be sure to complete the standard installation and setup procedures of your PC before installing QEMM-386. QEMM-386 is a device driver, which means that it must be loaded as part of the boot sequence of your PC. INSTALL automatically crcates the necessary command to load QEMM-386 and places it at the beginning of your CONFIG.SYS file--or creates a CONFIG.SYS file if you don't have one al- ready. INSTALL also installs Manifest, Quarterdeck's comprehensive memory reporting and analysis program, if Manifest is bundled together with QEMM-386. Manifest describes your PC, specifically the software and hardware that use your memory. In doing so, it gives you an understanding of how best to use your PC's memory. As a precaution, before installing QEMM-386, you should check that there is no other expanded memory manager loaded in your CONFIG.SYS. An ex- panded memory manager characteristically has the letters, EMM in its namc. Also, if Microsoft's HIMEM.SYS extended memory managcr is specified in your CONFIG.SYS file, you should remove it. QEMM-386 is an cxtended memory manager, and provides the same functionality as HIMEM. To install QEMM-386: ù Place the QEMM-386 diskette in drive A. ùType A:INSTALL and press ~. NOTE: If you have an LCD or Gas Plasma display, as on some laptops, we recommend that you: ùType A:lNSTALL/m and press ~. Follow the instructions on the screen. INSTALL copies tl-c QEMM files to your hard disk and allows you to configure QEMM. INSTALL's base con- figuration settings, for most of you, will bc correct. The most common reason that you'll want to changc QEMM-386's settings is when you're using VDISK. Normally, QEMM-386 takes all of extended memory for itself. If you're using VDISK, you'll want to allocate part of ex- tended memory to VDISK, using QEMM's EXTMEM con-mand line parameter. (For information on tl-e EXTMEM parametcr, sce Cl-apter 3: Thc QEMM.SYS Program, page 16.) 7 CHAPTER 2: INSTALLATION INSTALL displays a separate screen for each instruction you are likely to want to change. For information about the QEMM's command line parameters, see Chapter 3 The QEMM.SYS Program, page 11. That's all there is to installing QEMM-386. Since QEMM-386 is a device driver, you do have to reboot your system for its settings to take effcct. Most likely, your memory has been configured by INSTALL in the following way: O All the memory in your PC has been made into expandcd memory, com- patible with the EMS 4 expanded memory specification. O If you are installing an upgrade to QEMM-386, the install program honors the way you have previously configurcd your memory. To see how your memory is used, refer to Memory Report in Chaptcr 4, Tl-c QEMM.COM Program on page 27. To see a map of your first n~egabyte of memory, see Chapter 4 The QEMM.COM Program, Type Report, pagc 24. Also, if you are unfamiliar with memory, please rcfer to Quarterdeck's Manifest program. Manifest explains memory (first meg, expanded, cx- tended). It describes the various expanded memory specifications. It also gives you information about your DOS configuration and tl-e hardware in your PC. Manifest does display the same information, in it's category called QEMM-386, as does the QEMM.COM program--but in a morc pleasing visual format. The last screen displayed by the QEMM-386 installation program is a screel- that tells you to reboot your PC to load QEMM-386, and recon-mends thclt you then run the Optimize program. Optimize loads your TSR's, devicc drivers, and DOS resources in high memory. By loading these in l-igl- memory, you have more memory below 640K available for programs. Optimize does two things: O First it modifies the QEMM.SYS command line--adding thc RAM parameter. This parameter maps memory into any available memory ad- dresses in the high memory addresses between 64()K and 1024K. Wc call the memory mapped into these available addresses, high RAM. I ligl~ RAM is memory ready to be used to load TSR's, drivers (sucl- as net- works), and DOS resources--thus freeing memory below 640K and giving your DOS programs more memory in which to run. O Then it looks at your CONFIG.SYS and AUTOEXEC.BAT files to dctcr- mine what can be loaded in High RAM using QEMM-386's LOAvHI, and DOS resources programs. It tl-en changes your CONFIG.SYS and AUTOEXEX.BAT files accordingly. If you aren't using large DOS programs and hence aren't suffering from RAM cram, you won't need to run Optimize. Also if you are a sopl-isticated user, you may wish to choose what is loaded high. In this case, please rcfcr 8 CHAPTER 2: INSTALLATION to Chapter 5, The LOADHI Programs, and Chapter 6, DOS Resource Programs. After rebooting, your PC is ready to run expanded memory programs. NOTE: the QEMM-386 program, VIDRAM, discussed in Chapter 7 The VIDRAM Program, can make 96K more memory available to your DOS pro- gram--if you don't need to use EGA or VGA graphics. If after rebooting, your system fails to initialize, you can recover without having to resort to a boot floppy by doing the following: ù Reset your system again. Use the power switch if necessary. ùWait until you hear a beep, then hold down the Alt key. QEMM pauses with the message, "QEMM; Press any key to continue. Esc to abort." ù Press the Esc key. Your system will then proceed with the boot sequence. QEMM will not be loaded and thus, no programs will be loaded into high RAM. Your system will, however, be usable. Refer to Chapter 3, The QEMM.SYS Program on its parameters for changes needed on your system. See also Appendix A Troubleshooting for additional guidelines.. The Optimize program scans your CONFIG.SYS and AUTOEXEC.BAT files to find device drivers, TSRs, and DOS resources that can be put in the high memory area. From its analysis, Optimize makes the changes to these files to make use of this memory for you. It also makes sure you have a memory manager installed that can turn the high memory area into high RAM. For many, the use of Optimize during installation is all that is necessary to make immediate use of the high memory area. To run Optimize: ù Change to the subdirectory that you used to install QEMM-386. ùType Optimize and press ~. In special situations, some of you will want to customize your system fur- ther. The reference sections in this manual are for that purpose. In particular, see the Chapter 5 The LOADHI Programs, and Chapter 6 The DOS Resource Programs. In either case, we recommend that you run Optimize now. The changes you will see in your start-up files will help you use these programs. If you choose not to run Optimize now, you can run it at any time in the fu- ture. In fact, you should run Optimize whenever you add device drivers, TSRs, change your DOS resources memory or change your high memory configuration in any way. 9 CHAPTER 2: INSTALLATION Optimize changes CONFIG.SYS and AUTOEXEC.BAT. Your original files are first copied to CONFIG.QDK and AUTOEXEC.QDK. Optimize also re-boots your system twice before it is done. When it completes, your system should have programs and data in high RAM. And, your application programs should have more memory available to them. NOTE: If your AUTOEXEC.BAT file runs a program that is not a TSR (that is, it does not exit immediately on its own), then you will have to quit that program manually to allow Optimize to continue. Optimize does not attempt to read or analyze any batch files it finds within your AUTOEXEC.BAT. Any TSRs loaded from within an embedded batch file will not be loaded into high RAM. If at all possible, consider putting the contents of these batch files directly into AUTOEXEC.BAT. Then re-run Op- timize to gain even more memory. ize To run Optimize at any time in the future, change to the subdirectory that ~n your used to install QEMM-386 and ùType Optimize and press ~. Optimize changes CONFIG.SYS and AUTOEXEC.BAT. Your original files are first copied to CONFIG.QDK and AUTOEXEC.QDK. Optimize also re-boots your system twice before it is done. When it completes, your system should have programs and data in high RAM. And, your application programs should have more memory llvail~ble to them 10 CHAPTER 2: INSTALLATION This chapter is the reference guide for the command line parameters used with QEMM.SYS. Since QEMM.SYS, on installation, uses the command line parameters it thinks appropriate for your system, you should not have to use the commands in this chapter unless you want to fine-tune your memory configuration or you are experiencing problems. To use a QEMM.SYS command line parameter you type the parameter name on the same line as DEVICE=QEMM.SYS in your CONFIG.SYS file. You may use an abbreviation instead of the parameter name. The abbreviation for each QEMM.SYS command line parameter is shown below in paren- theses after each parameter name. For example, the QEMM.SYS command line with the RAM and ROM parameters set, looks like: DEVICE=QEMM.SYS RAM ROM=COOO IMPORTANT: Do not put spaces within a parameter. In the example above, make sure that you don't have a space before or after the = sign in ROM=COOO. Also, all of the parameters must be typed on the same line as DEVICE=QEMM.SYS. There are three categories of QEMM.SYS parameters: frequently used parameters, fine-tuning parameters, and parameters to try when QEMM does not work. Note there is often no good way of knowing that a parameter will help your situation--you'll have to experiment. Most frequently used QEMM.SYS command line parameters are: O RAM or RAM=xxxx-yyyy puts RAM everywhere or in the range specified. The RAM parameter must be set if you want to run TSRs, drivers or DOS resources in high memory. O ROM or ROM=xxxx-yyyy puts ROM everywhere or in the range specified. Specifying ROM usually results in the ROM code running much faster since RAM is often faster than ROM. O INCLUDE=xxxx-yyyy, (I), considers the range specified mappable. O EXCLUDE=xxxx-yyyy, (X), considers the range specified unmappable. QEMM-386 command line parameters to use when fine-tuning your memory include: O HELP displays all QEMM.SYS parameters and a one line description of what each does. O ? displays a list of all QEMM.SYS command line parameters and where appropriate the abbreviation for the parameter. O ADAPTERRAM=xxxx-yyyy, (ARAM), indicates that an adapter has RAM in the range specified. 11 CHAPTER 3: THE QEMM.SYS PROGRAM O ADAPTERROM=xxxx-yyyy, (AROM), indicates that an adapter has ROM in the range specified. O AUTO, (AU), sets QEMM to turn on if necessary. O COMPAQEGAROM, (CER), relocates Compaq's video ROM. O COMPAQHALFROM, (CHR), splits Compaq's system ROM in half. O COMPAQROMMEMORY, (CRM), uses Compaq ROM memory. O DOS4, (D4), alters EMS page ordering for DOS 4.00. O EXTMEM=xxxxx, (EXT), specifies the amount of extended memory which should not be used by QEMM. O FRAME=xxxx, (FR), sets the page frame location (either a segment or NONE). O HMAMIN=xx sets the minimum size of the HMA (0-63K). O MAPS=xx, (MA), sets the number of alternate register sets. O MEMORY=xxxxx, (ME) or (MEM), specifies the 80386 extended memory that QEMM uses both for itself and as expanded memory. O NOEMS tells QEMM not to be an expanded memory manager. O NOPAUSEONERROR, (NOPE), doesn't pause on error. O OFF, (OF), turns QEMM off. O ON turns QEMM on. O PAUSE pauses while parsing commands. O WATCHDOG=[0,1,2], (WD), sets the type of watchdog timer. QEMM.SYS command line parameters that should only be used when ex- periencing problems include: O DISKBUF=xx, (DB), specifies the size in K of the disk buffer to use to handle SCSI disk drives. O COMPAQ386S, (C386S), identifies your PC as a Compaq 386S. O DMA=xx, (DM), sets the size of the DMA buffer. O HANDLES=xxx, (HA), sets the number of EMS handles. O IGNOREA20, (IA), does not trap the 8042. O NOCOMPAQFEATURES, (NCF), disables use of EGAROM, HALFROM, and ROMMEMORY on a Compaq computer. 12 CHAPTER 3: THE QEMM.SYS PROGRAM O NOFILL, (NO), doesn't fill conventional memory. O NOHMA instructs QEMM to consider the HMA already allocated. O NOROM, (NR), doesn't map the reboot page of the system ROM. O NOROMHOLES, (NRH), doesn't look for holes in the system ROM. O NOSHADOWRAM, (NOSH), doesn't use Shadow RAM. O NOSORT, (NS), doesn't sort memory. O NOTOPMEMORY, (NT), doesn't look for top memory. O NOVIDEOFILL, (NV), doesn't fill video memory. O NOXBDA, (NX), doesn't move the extended BIOS data area. O NOXMS instructs QEMM to not be an extended memory manager. O OLDDV, (ODV), tells QEMM that you are running DESQview 1.3 or 2.00. O TASKS=xx, (TA), sets the interrupt nesting level. O UNUSUAL8042, (U8), tells QEMM that your 8042 is non-standard. O UNUSUALEXT, (UX), tells QEMM that the method of determining the amount of extended memory is non-standard. Described below are the QEMM.SYS command line parameters that you use most frequently. O RAM or RAM=xxxx-yyyy specifies that QEMM should "fill in" areas of memory above 640K and below 1024K which do not have ROM, RAM, or adapter RAM in them. These areas can then be used by the LOADHI programs and DESQview's XDV program. You may specify RAM without the address range xxxx-yyyy and let QEMM automatically use all appropriate memory addresses. If RAM is specified, QEMM's initial state is forced ON and cannot be overridden. O ROM or ROM=xxxx or ROM=xxxx-yyyy specifies areas of ROM which should be copied to RAM and then mapped into the same place. xxxx and yyyy are hexadecimal numbers which specify the address range which should be copied. Specifying ROM usually results in the ROM code running much faster since RAM is often faster than ROM. For ex- ample, to have the system BIOS ROM mapped into RAM you would use ROM=FOOO-FFFF. To map an EGA ROM use ROM=COOO as in the last example, only specify the starting address and let QEMM determine the size of the ROM. You may specify ROM without the address range xxxx-yyyy and let QEMM map all ROMs. If ROM is specified, QEMM's initial state is forced ON and cannot be overridden. 13 CHAPTER 3: THE QEMM.SYS PROGRAM O INCLUDE=xxxx-yyyy, (I), specifies an area of memory which should be under the control of QEMM. xxxx and yyyy are hexadecimal numbers which specify the address range (xxxx-yyyy) which should be included. xxxx should be a multiple of 4K. Under normal conditions, QEMM auto- matically detects all usable areas. This parameter is most frequently used based on suggestions made by the QEMM Analysis procedure (see Chapter 4, The QEMM.COM Program, page 27). Another use is if you wanted to have QEMM use an unused video area, such as the color area when using a VGA with a monochrome monitor, then INCLUDE=B800- BFFF would be appropriate. The INCLUDE and EXCLUDE options are processed sequentially, so it is possible to EXCLUDE an area and then INCLUDE a part of it later on the command line. O EXCLUDE=xxxx-yyyy, (X), specifies an area of memory in the first megabyte which should not be under the control of QEMM.SYS. You only need to specify an excluded region if QEMM.SYS cannot automat- ically detect it. xxxx and yyyy are hexadecimal numbers which specify either the address range (xxxx-yyyy) which should be excluded. xxxx should be a multiple of 4K. For example, if you have a network adapter that uses 16K of memory at address CCOO, then you would use EX- CLUDE=CCOO-CFFF. You may specify multiple ranges by using EX- CLUDE several times. Note that QEMM needs at least 64K of contiguous memory between 640K and 960K (AOOO to FOOO) for a page frame, so care must be taken to leave at least 64K free in this area. If a 64K area can not be found above 640K, then 576K (9000) will be automatically selected by QEMM.SYS. If selected, the 9000 address will reduce the amount of memory available to DOS by 64K. (See also Page 16 for more information about the FRAME command line parameter.) QEMM.SYS command line parameters that you use in fine-tuning your memory are listed below. O HELP displays all QEMM.SYS parameters and a one line description of what each does. O ? displays a list of all QEMM.SYS command line parameters and where appropriate the abbreviation for the parameter. O ADAPTERRAM=xxxx-yyyy, (ARAM), identifies an area of memory as having RAM from an adapter of some sort, usually a network adapter, 3270 adapter, or some other special device. Normally QEMM automat- ically finds these areas, but with some adapters may not be able to. If it does not, then you use this switch to specify the type of memory in this area. These devices usually use this RAM to provide very high perfor- mance by allowing the PC to access some memory on the adapter as though it is part of the computer's memory. These areas mllst NOT be 14 CHAPTER 3: THE QEMM. SYS PROGRAM used as high RAM. The ADAPTERRAM switch is just like EXCLUDE, except that the QEMM.COM Type display will show the area as "Adapt- er RAM" rather than as "Excluded". O ADAPTERROM=xxxx-yyyy, (AROM), identifies an area of memory as having ROM from an adapter of some sort. This ROM area is usually from a network adapter, 3270 adapter, video adapter, or some other spe- cial device. Normally QEMM automatically finds these areas, but with some adapters it may not be able to. If it does not, then you use this switch to specify the type of memory in this area. The ROM for the adapter might not be visible to QEMM when it is looking for ROM. This switch ensures that QEMM will not allow the area to be mappable, and thus it will not place high RAM into the area. If the ROM is seen by QEMM and the ROM switch also appears, then the adapter ROM will be mapped to RAM to speed up access to the ROM. Specifying ADAP- TERROM is more like EXCLUDE, but allows you to document the ex- cluded area for yourself. O AUTO or ON or OFF, (AU or ON or OF), controls whether QEMM puts the system into virtual 8086 mode and how expanded memory should be handled. AUTO (AU) specifies that QEMM should tum ON when a program needs expanded memory. ON specifies that expanded memory is available and the processor is in virtual 8086 mode. OFF (OF) specifies that expanded memory is not available and the processor is in real mode. If you don't specify any of these three parameters, AUTO is used. We recommend that you use AUTO unless you have a specific reason for setting the initial state to ON or OFF. Note that if the RAM or ROM parameters are specified, the initial state is automatically set to ON, and may not be tumed OFF. O COMPAQEGAROM, (CER), relocates Compaq's video ROM. Compaq computers automatically copy the slow EGA or VGA ROM which is ad- dressed at COOO to fast memory addressed at EOOO. QEMM.SYS reverses this process to increase the amount of high memory on Compaq com- puters. It also automatically maps RAM into the addresses of ROM at COOO to increase the ROM speed. When QEMM.SYS detects a Compaq 386, QEMM.SYS will use COMPAQEGAROM (CER) as a default. If you want to shut it off, specify NOCOMPAQFEATURES (NCF~ on the QEMM.SYS command line. O COMPAQHALFROM, (CHR), splits Compaq's system ROM in half. Most Compaq 386 computers have two halves to their system ROM. The two halves are addressed at FOOO-F7FF and F800 ~ These ad- dresses contain redundant information. QEMM.SYS splits the ROM to make the redundant section useful for high memory. When QEMM.SYS detects a Compaq 386, QEMM.SYS sets COMPAQHALFROM (CRM) as a default. If you want to shut this off, specify NOCOMPAQFEA- TURES (NCF) on the QEMM.SYS command line. 15 CHAPTER 3: THE QEMM.SYS PROGRAM O COMPAQROMMEMORY, (CRM), uses Compaq ROM memory. Com- paq Deskpro 386 computers reserve 128K of high memory addresses to speed up the system ROM and the EGA ROM. QEMM.SYS can both speed up the system ROM (using its ROM parameter) and make these high memory addresses available to load TSR's, device drivers, and DOS resources, using its LOADHI programs. When QEMM detects a Compaq 386, QEMM will use COMPAQROMMEMORY (CRM) as a default. If you want to turn this parameter off, you must specify NOCOMPAQFEATURES (NCF). O DOS4, (D4), alters EMS page ordering for DOS 4.00. You use DOS4 only with PC-DOS version 4.00 and when using its /X instruction. DOS4 instructs QEMM.SYS to deviate from the EMS 4.0 specification enough to accommodate bugs in early versions of PC-DOS 4.0, which did not strictly adhere to the EMS 4.0 specification. If you are using PC- DOS 4.00 we recommend you not use the /X switch to BUFFERS, VDISK, and FASTOPEN. O EXTMEM=xxxxx, (EXT), specifies the amount of extended memory which should not be used by QEMM.SYS. The xxxxx must be in the range 1 to 31744 representing an allocation of lK to 31744K. This parameter is useful when using RAM disks and disk caches which use extended memory, since you can ask QEMM to "leave alone" the memory needed. If the EXTMEM parameter is omitted, QEMM leaves no extended memory and uses all it can find. The EXTMEM and MEMORY parameters have opposite meanings. The EXTMEM means "leave at least this much memory". MEMORY means "use as much as this much memory". O FRAME=xxxx, (FR), specifies the page frame address, which is the ad- dress of the beginning of the 64K segment through which expanded memory is mapped according to the EMS specification. Typical loca- tions for xxxx are: COOO, C400, C800, CCOO, DOOO, D400, D800, DCOO, or EOOO. In unusual cases AOOO may be used if no free area can be found and you have a monochrome or CGA video adapter card. A 64K area of memory should be available at one of these addresses to in order to pro- vide EMS capabilities. If the FRAME parameter is omitted, the value of xxxx is chosen by QEMM according to your hardware configuration. We recommend that you not set FRAME except when QEMM's auto- matic choice of a base address fails because of a hardware conflict that QEMM can't detect. If there are no satisfactory addresses available, QEMM still can be used for memory filling, sorting, high RAM filling, multitasking and ROM mapping, but not as an expanded memory manager, by specifying FRAME=NONE. 16 CHAPTER 3: THE QEMM . SYS PROGRAM O HMAMIN=xx specifies the minimum amount of memory that a pro- gram which uses the XMS High Memory Area (HMA) can request. Since only one program can use the HMA but several programs might want to use it, this parameter only allows a program which uses at least xxK of memory in the HMA. The parameter is not necessary if you have only one program which uses the HMA, such as DESQview. O MEMORY=xxxxx, (ME or MEM), specifies the amount of 80386 ex- tended memory that QEMM uses both for itself and as expanded memory. xxxxx should be in the range 128 to 32128, representing an al- location of 128K to 32128K. If the MEMORY parameter is omitted, QEMM takes all of the available extended memory. O NOEMS tells QEMM not to provide any expanded memory services at all, even for multitasking. It is only useful if you want to load a dif- ferent expanded memory manager, but you still want to use QEMM. O NOPAUSEONERROR, (NOPE), doesn't pause on an error. QEMM usually displays a "Press any key to continue, ESC to abort" message after parsing command line instructions if there are parameter errors. This instructs QEMM.SYS to not display the message. When an instruc- tion causes QEMM.SYS to generate the above error, and when the error generated has been shown to not cause any disruption of the system, use the NOPE instruction O OFF, (OF), see AUTO I ON I OFF. O ON see AUTO I ON I OFF. O PAUSE tells QEMM.SYS (and all the QEMM-386 programs) to pause the display when outputting messages. The PAUSE command permits you to hit the "Esc" key to stop QEMM.SYS from installing. This is use- ful when trying out new parameters, so you can abort the load if there was an error. Note that if there is an error on the QEMM.SYS command line, QEMM will automatically pause to show you the source of the error. O WATCHDOG=O,l, or 2, (WD), specifies the type of watchdog timer set. In the DESQview Change a Program "Protection level (0-3)" setting, level one represents protection against programs which lock interrupts for too long. Watching for locked interrupts depends on the existence of certain hardware. There are two different kinds of hardware that QEMM.SYS supports to perform the "WATCHDOG" timer feature. One is on PS/2s and another is on Compaq Deskpro 386 computers. By default QEMM.SYS tries to determine which hardware to use. The WD switch is for a machine which "clones" one or the other of the abovc mentioned features. WD=O means no watchdog timer; WD=l means PS/2-style; WD=2 means Compaq-style. 17 CHAPTER 3: THE QEMM.SYS PROGRAM Described below are those QEMM.SYS command line parameters that should be used only when you are experiencing problems. O COMPAQ386S, (C386S), identifies the PC as a Compaq 386S. QEMM will normally be able to automatically identify the Compaq 386S if Compaq's Setup program version 6.02 or greater has been run. If you are not using this version, then this switch is necessary in order for QEMM to perform the correct optimizations. After using version 6.02 or greater of Compaq's Setup program, you will not need this switch. O DISKBUF=xx, (DB), specifies the si~e of the SCSI disk buffer, in K. Be- cause of the special way that SCSI devices acces memory, QEMM's nor- mal DMA buffering is not adequate. QEMM can optionally use a separate SCSI buffer for fixed disk accesses. This parameter specifies the size of this buffer. The larger the buffer, the better the disk performance, at the expense of conventional memory use. O DMA=xxx, (DM), specifies the length of the maximum DMA transfer that that can performed. xxx must be in the range 12 to 128, repre- senting a maximum length of 12K to 128K. O HANDLES=xxx, (HA), specifies the number of handles and names avail- able. xxx must be in the range 16 to 255. Each application which uses ex- panded memory requires at least one handle. Some applications require extra handles. The default is 64 which should be adequate for most pur- poses. Larger values increase the amount of extended memory used by QEMM. Each HANDLE requires 28 bytes of extended memory. O IGNOREA20, (IA), does not trap the 8042. By default, QEMM.SYS traps the 8042 ports for the purpose of detecting programs which attempt to manipulate the state of the A20 line. Programs do this to access ex- tended memory. However, sometimes keyboard problems arise as a result. The IA instruction disables support of HIMEM.SYS, but it may serve to remove some keyboard-related problems as a trade-off. QEMM- 386 supports XMS, and so there is no good reason to load HIMEM.SYS. O MAPS=xxx, (MA), specifies the number of alternate maps which are available. xxx must be in the range O to 255. Each map uses 4K of ex- tended memory. Alternate maps are used by operating environments to speed up multitasking. There should be one more map specified as programs you wish to run concurrently. The default value is 8. If you do not run a multitasker, you can set MAPS=O. O NOCOMPAQFEATURES, (NCF), disables use of EGAROM, HALFROM, and ROMMEMORY on a Compaq computer. If QEMM detects a Compaq computer, it turns on all three Compaq parameters (COMPAQEGAROM, COMPAQHALFROM, and COMPAQROM- MEMORY). You can turn them all off by specifying NOCOMPAQFEA- TURES. After turning all features off, you may turn each on separately. 18 CHAPTER 3: THE QEMM.SYS PROGRAM O NOFILL, (NO), specifies that QEMM.SYS should not fill conventional memory below 640K. This option is only meaningful if your machine has less than 640K of convcntional memory. If it docs, QEMM normally fills in this missing memory, up to 640K from extended memory. NOFILL specifies not to do this. If QEMM fills conventional memory, the initial state ON is forced and cannot be overridden. NOFILL also prevents video filling (see NOVIDEOFILL). O NOHMA instructs QEMM to consider the HMA already allocated. If there is an XMS driver loaded before QEMM and the HMA is already al- located, you should use this switch or NOXMS. O NOROM, (NR), doesn't map the reboot page of thc system ROM. Often QEMM normally maps one 4K page of the systcm ROM in order to detect reboots. QEMM.SYS can detect re-boots without this proccss. In this case, you may specify NOROM and save 4K of memory. O NOROMHOLES, (NRH), disables QEMM's automatic detc ction of ROM holes, or unused addresses in ROM. Many system ROM chips which are addressed betwecn FOOO and FFFF have large unused areas. QEMM.SYS automatically detects unused areas and includes thcm. However, sometimes QEMM.SYS's auto-detection does not work, due to some areas that are initially unused but arc used later. If you experience problems where the system functions properly at first, and then has problems later, use this instruction and thell check the areas specified by the QEMM.COM ANALYSIS report. O NOSHADOWRAM, (NOSH), doesn't use Shadow RAM. PCs with the Chips & Technologies 386 chip set or NEAT chip set put the 384K of reserved memory in low memory with an 1/0 port-sclcctable mcthod of getting at some of it. QEMM automatically detcrmines if your PC has this capability. If it does not work, it may be that the NOSH paramcter iS necessary. O NOSORT, (NS), specifies that memory should not be sortcd by speed. QEMM normally tests the speed of all conventional memory and all available extended memory, and uscs the fastc st memory first. Using NOSORT forces QEMM to usc the memory in the order it finds it. The sorted memory is used to replacc the initial 64()K convclltic)nal mcmory, QEMM code and page tables, fill the vidco area, ROM mapping, RAM filling and expanded memory. QEMM gcts its memory starting from the highest memory address possible for the amount specified in MEMORY (with a default of all). If convl~ntional mcmory is remapped into faster memory, the initial state ON is forced and cannot be overridden. O NOTOPMEMORY, (NT), doesn't look for top mcmory. Some PCs put 384K of memory just below the top of the 16 megabyte address space (384K below). QEMM.SYS automatically looks thcre to dc termine if 19 CHAPTER 3: THE QEMM.SYS PROCRAM there is any memory. If there is memory, QEMM.SYS will make it avail- able for use. Sometimes a conflict occurs when QEMM.SYS looks at tht top of the memory spacc, perhaps becausc sometl~ g is already using that area or memory, or perhaps becausc the hardwarc design of thc computer does not like having softwarc attempt to acccss this arcas. In these cases, NT instructs QEMM.SYS to not usc (or look for) any memory at the top of the memory spact~. If your computer hallgs whe it boots, use the NT instmction. O NOVIDEOFILL, (NV), specifies that the memory arca from A()OO to B7FF is not to be filled with memory. This option is only mt~aningful on monochrome and CGA l'Cs. On thcse systems QEMM will add memory from 640K (AO()O) to the bottom of the video adaptcr card (either BOOO for monochromc or B8()() for CGA) alld adjust thc memory size of DOS accordingly. O NOXBDA, (NX), specifies that QEMM should not movc thc cxtended BIOS data area. On machines that havc onc, QEMM.SYS automatically moves the eXtended BIOS Data Arca (XBDA), whicll is normally at 639K, into the addresses used by QEMM.SYS. QEMM.SYS docs this be- cause the XBDA presents an obstacle to propcr memory managcmellt. It is possible, however, that a program would (crroneously) assumt~ that the XBDA is at 639K. When this occurs, the NX instruction disablcs this feature. If a program whicll is running on a PS/2 model 80 or othtr l'C with an XBDA, encountcrs difficulty, the NX instruction may remcdy the difficulty. U NOXMS instructs QEMM not to be an extended mcmory managcr. Nor- mally QEMM provides extended memory specificatioll (XMS) servicts. O OLDDV, (ODV), spccifies that QEMM should bc compatiblc with DESQview 1.3 and 2.()(). This results in QEMM USillg 4K to 8K morc Coll- ventional memory. DESQview 2.01 alld above do not rcqUire this parameter. O TASKS=, (TA), sets the number of interllal QEMM.SYS data structurcs, used when QEMM.SYS handlts interrupts out of protcctcd modc. Thcrc are 16 TASKS by default. Each TASK requircs ~84 bytcs of cxtellded memory. O UNUSUAL8042, (U8), specifies that the computer has a ''noll-stalldard 8042 keyboard controller. If setting QEMM.SYS to ON or m~ g DESQview disables the kcyboard thell the UNUSUAL8042 switch should be specified. O UNUSUALEXT, (UX), tells QEMM that tht~ metllod of determinill~ tht amount of extended memory is noll-stalldard. If QEMM hall~s at boot time, this switch could htlp. This switch sometimt~s makcs QEMM.COM's Memory report on cxtcndcd mcmory inaccuratc. 20 CHAPTER 3: THE QEMM.SYS PROGRAM This chapter describes the features of the QEMM.COM program. The pro- gram has two purposes. You use QEMM.COM to change the modc (state) of QEMM to ON, OFF or AUTO. You also use QEMM.COM to report status in- formation about QEMM and report information about your first megabytc of memory. QEMM.COM displays first meg information in cither map or list format. The information displayed by QEMM.COM is the same as that dis- played by Quarterdeck's Manifest program for the QEMM-386 catcgory. QEMM.COM commands consist of QEMM followed by a command linc parameter. If the command line parameter has a long name, you can cnter an abbreviation instead of the name. This abbreviation is shown in parcn- theses following the parameter name. There are two command line paramcters that givc you assistancc: O ? Iists all the namcs and abbreviations of all QEMM.COM command line parameters. Help displays the namc and a one linc description about each parameter. To enter these commands: ù Type QEMM ? and press ~, or ù Type QEMM HELP and press ~ The information requested is displayed on the screen. Two command line paramctcrs control messages displayed after a QEMM.COM command is entered. These are: O NOPAUSEONERROR (NOPE) instructs QEMM.COM not to display the message, "Press any key to continue, ESC to abort". This message is normally displayed when you enter a wrong QEMM.COM command line parameter. U PAUSE instructs QEMM.COM to pause for a key before execllting a command. It also may be uscd to prevent information from scrolling off the display. One command linc parameter controls how QEMM.COM's reports are dis- played on the screen: ll MAP instructs QEMM.COM to display its report in a map format. This command line parameter is a modificr and should be added to thc QEMM.COM command line when necded. For example, to display the QEMM.COM Access report as a map: ùType QEMM ACCESSED MAP and press ~. The default format instructs QEMM.COM to display its reports as a list. 21 CHAPTER 4: THE QEMM.COM PROGRAM QEMM-386 watches what memory is accessed by programs--so that QEMM.COM can at any time display a report about what high memory has been accessed and what has not been. QEMM.COM also can make an analysis as to what additional memory you can use to load TSR's, drivers, and DOS resources in high memory. To give you control over when QEMM.COM begins watching high memory to determine what memory is accessed, QEMM.COM has a command line parameter called RESET. O RESET resets the state of memory to unaccessed. RESET is useful to use before running a program, so that you can determine which areas of high memory are accessed by a specific program. I~S There may be times when you wish to change the current mode of QEMM. The current mode controls whether QEMM puts the system into virtual 8086 mode and how expanded memory should be handled. You can set the cur- rent mode to AUTO, ON, or OFF. O AUTO (AU) specifies that QEMM should turn ON when a program needs expanded memory. O ON specifies that expanded memory is available and the processor is in virtual 8086 mode. O OFF specifices that expanded memory is not available and the processor is in real mode. The mode forces ON when conventional or video memory is filled, high RAM or ROMs are mapped, conventional memory is sorted, or some ex- panded memory is in use. To change the current mode to ON: ùType QEMM ON and press ~ The mode is then changed. You can change the mode to OFF or AUTO in the same way you changed the mode to ON. 22 CHAPTER 4: THE QEMM.COM PROGRAM The two LOADHI programs, (LOADHI.COM and LOADHI.SYS) enable you to load TSRs, drivers, and DOS resources into available regions of high RAM. Your high memory is transformed into higll RAM by QEMM.SYS's RAM parameter. If you have run the Optimize program this has been done for you. Check your CONFIG.SYS file for the QEMM statement and be sure the RAM parameter is present. If not, refer to Chapter 3 page 13. This chapter explains how and when the LOADHI programs may be used, and describes the command line switches available. These switches help you determine and modify the effectiveness of LOADHI in freeing up convention- al memory. Freeing up this memory may enable you to: O run programs that would not fit in memory before, O add TSRs you've been doing without, O speed up memory-starved programs that no longer need to go to disk for their data, O add DOS resources to improve system response time and program effec- tiveness, and O increase the memory available to applications running in DESQview. The LOADHI programs are very effective with or without customization by you. However, it is important to note that if LOADI 11 is unable to make use of high RAM for a particular program or a DOS resource, it will use convention- al memory instead. Thus, your programs and DOS resources are available for use whether they were relocated or not. In order to use these two programs effectively, you need high RAM. Tn this chapter, it is assumed that QEMM has mapped available memory addresses with memory. If this is not the case, you may wish to install and setup QEMM as described in Chapter 2, Installation. Both LOADHI.SYS and LOADHI.COM load programs into high RAM. You use LOADHI.SYS to load device drivers with an appropriate DEVICE= state- ment in your CONFIG.SYS file. You use LOADHI.COM to load programs either from COMMAND.COM'S command line or from within your AUTOEXEC.BAT file. Both LOADHI programs support the same set of com- mand line options (switches) which let you alter the way LOADHI normally allocates and uses high RAM. These switches are described more fully on page 34, LOADHI Options. In addition, LOADHI.COM can be executed from the command line at any time to give you a listing of your current usage of high RAM. The following section describes this listing. It defines key terminology used in this chapter. And it is also the starting point for you, if and when you need to employ LOADHl's command line options. 29 CHAPTER 5: THE LOADHI PROGRAMS You display the LOADHI report by running LOADHI from the command line without specifying any command line option or program file to load: ùType LOADHI and press ~J. The LOADHI report, shown below, describes what higll RAM is in use and still available, the amount of high RAM used, and the names of the programs or DOS resources using the memory. It also shows you the memory address range in use by each block withill a region. As described in Chapter 2, QEMM locates and maps high memory areas into high RAM. These memory areas may be scattered throughout the high memory area due to the presence of BIOS and system ROM and RAM memory already in use by peripheral adapters. Each contiguous area of memory converted into high RAM is referred to as a region. Each region is given a number. Memory is allocated from a region in blocks. These regions may vary in size. Each time you load something into high RAM, LOADHI al- locates a block of memory from one of these regions. That block shows up in the list for that region and the region's available size and memory area is reduced accordingly. However often you call upon LOADHI to populate high RAM, there will never be more or less regions available (barring a fundamental change in your hardware, such as adding or rcmoving a peripheral adapter card). The number of blocks listed for a given region will, however, increase as LOAD- Hl uses this memory. If you display the LOADHI report before you have loaded TSR's or drivers in high RAM, you can see the number of regions found and mapped, the high memory address ranges, and the size of each region. Each region is marked as Available in the status column. This report serves as an excellent baseline for planning the best use of high RAM. The sum total of the regions' sizes gives you the upper limit to the conventional memory that can be saved by using LOADHI. C)loadhi Region ~rea Size Status 8000 E00~ 0.1K llsed ~IPX) E007 E0hC Z.8K Used (FILES) E0EE E4~F ISK Used ()PX) E4E0 ~ E7FZ l3K 60~J l~hle Z C534 -- C53~ 0 IK Used (llOUSE) Z C53E C6~ 4 8K IJsed (8UFFEES) Z C8E7 ~ JZZ6 9377K Used (nOlJSE) 30 CHAPTER 5: THE LOADHI PROGRAMS You use the LOADHIISYS program when you want to load a device driver into high RAM. Device drivers are essentially extensions to DOS which DOS will load on system startup as it processes your CON FIG.SYS file. Any statement in your CONFIG.SYS file which begins witll the keyword DEVICE= instructs DOS to load the device driver which is specified following that keyword. Some common devices are memory managers, add-on peripheral device drivers, such as a disk drive or a mouse, and extensions to existing devices, such as the ANSI.SYS driver supplied with DOS that some programs use to address the video display. With the exception of QEMM.SYS, which LOADHI relies upon, any device driver that you currently use or anticipate using in the future is a candidate to consider loading into high RAM. Occasionally you may find a device driver that is sensitive to its location in memory and which will not work properly, if at all, when relocated. Other device drivers may require that you experiment with the customization capabilities of LOADHI. However, for the most part you will encounter little difficulty in using LOADHI.SYS with your device drlvers. Since ANSI.SYS is available on every DOS system, vve use it in the example below to show how you take advantage of LOADHI.SYS In this example, the sample CONFIG.SYS file has a statement which loads QEMM.SYS, as well as the following statement loading ANSI.SYS: DEVICE=C:\DOS\ANSI.SYS This statement instructs DOS to load the file ANSI.SYS which can be found itl the DOS subdirectory of disk drive C. To load ANSI.SYS in high memory, you must instruct DOS to load the file LOADHI.SYS instead of ANSI.SYS. L.OADHI will take care of loading the ANSI.SYS file. You do this by modifying the CONFIG.SYS statement so that it reads: DEVICE=C:\QEMM\LOADHI.SYS C:\DOS\ANSI.SYS NOTE: Editing an existing DEVICE= statement simply displaces the device driver specification on the statement line. If thc devicc driver you want to relo- cate takes command line switches of its own (the example ANSl.SYS has none), and you make use of any of these options, they should be retained in the edited statement also. This easy modification to your CONFIG.SYS file represellts the simplest way to take advantage of LOADI lI's features. For many systems, this will be c~de- quate. When you need more control over the placement of device drivers or encounter difficulty in relocating a device driver, you should see the LOADHI switches section of this chapter. 31 CHAPTER 5: THE LOADHI PROCRAMS You use LOADHI.COM to load TSR (Terminate and Stay Residtnt) programs in high memory or to relocate DOS resources (such as disk buffers and file handles) to high memory. The TSRs you customarilv use are probably foulld in your AUTOEXEC.BAT file. DOS resources arc allocated, if at all, from your CONFIG.SYS file. Other TSRs which you use only occassionally may be loaded directly from the DOS prompt (or by way of a batcll file). This section first explains how to use LOADHI.COM to load your TSRs into high RAM. It then briefly describes how you may use LOADHI.COM in Coll- junction with QEMM-386's programs (BUFFERS.COM, FILES.COM, etc.) thclt place DOS resources in high RAM. Since these programs also perforlll other functions, they are more fully described in Chapter 6, The DOS Rcsource Programs. In describing how to use LOADHI.COM, we usc, as an exalllple TSR, a pro- gram called DOITALL. This imaginary program resides in a disk directory called UTILS and has several command line options whicll modify its be- havior. Our example shows two of these options: thc /m option to force the program to display in monochrome and the /r option wllicll instructs it to stay resident (it has a stand-alolle mode) and available to be "popped up" on demand. To run DOITALL, the following statemellt nec~ls to be executtd: C:\UTILS\DOITALL /m Ir This statement could be present in your AUTOEXEC.~AT file, in some other batch file you execute as needed, or a statement you ellter from the DOS prompt whenever you want the program in memory. To mll DOITALII out of high RAM, the above statement nceds to be change-l so thLlt it executt s LOAD- HI first: C:\QEMM\LOADHI C:\UTILS\DOITALL /m Ir Notice that the statement that executed the program is now a parameter to tlle program LOADHI. All that we have done is insert the drivc and directory path for LOADHI and made LOADtll the program to be loaded. LOAL I 11 in turn loads and executes DOITALL in higll RAM. DOITAI..I. still sees its parameters when it initiali~es. In many cases this simple cllange to your sys- tem is sufficient to free up a significant amount of melllory an-l still elljoy the benefits of your TSR programs. There are also several programs included with QEMM~ wllicll are meallt to be used in conjunction with LOADHI.COM. Thtse progrLlms ar- I BUFFERS.COM, FILES.COM, FCBS.COM and LASTDRIVE.COM. As their ~l names suggest, they allow you to allocate and use the associate(l DOS resour- ces out of high RAM. If your CONFIG.SYS file is currelltly allocatillg any of these resources, the use of LOADHI and these utilities frees up IllUCIl of the conventional memory now devoted to them. Each of these programs allocate memory before they ter~ ate. If thev are in high RAM, the memory they allocate comes from higll RAM. Altho~lgll th-~s~ 32 CHAPTER 5: THE LOADI!I PROGRAMS programs are fully described in the Chapter 6, The DOS Resource l'rograms, a typical example of the use of each one with LOADHI should give you an idea about their use. These examples do omit the details about the disk and sub- directory location of the programs. Example l-Allocate buffers in high memory: Before LOADHI.COM: CONFIG.SYS file: BUFFERS=20 AUTOEXEC.BAT file: After LOADHI.COM: CONFIG.SYS file: BUFFERS=l AUTOEXEC.BAT file: LOADHI BUFFERS=20 Example 2-Add 10 file handles: Before LOADHI.COM: CONFIG.SYS file: FILES=20 AUTOEXEC.BAT file: After LOADHI.COM: CONFIG.SYS file: FILES=10 AUTOEXEC.BAT file: LOADHI FILES +10 Example 3-LoadFCBS in high memory: Before LOADHI.COM: CONFIG.SYS file: FCB5=8,2 AUTOEXEC.BAT file: After LOADHI.COM: CONFIG.SYS file: FCB5=1,0 AUTOEXEC.BAT file: LOADHI FCB5=8,2 Example 4-Increase last drive to include drive letter G: Before LOADHI.COM: CONFIG.SYS file: LASTDRIVE=G AUTOEXEC.BAT file: After LOADHI.COM: CONFIG.SYS file: LASTDRIVE=D AUTOEXEC.BAT file: LASTDRIVE=G 33 CHAPTER 5: THE LOADHI PROCRAMS s There are several command line options for LOADHI which can help you make better use of your high RAM if you find that the simple, straightforward approach is inadequate. The command line options may help if you have trouble loading one or more of your programs into high RAM. Some command line options are to be used if you have more candidates for high RAM than seem to fit. Another com- mand line option lets you specify a particular region to use or exclude. There is an option that will allow you to find out how much memory a program real- ly needs, when that isn't clear either from the program documentation, or from a guess-timate based on its file size. The LOADHI command line has the following format: LOADHI [loadhi-opts] target-program [target-program-opts] The brackets in the statement indicate that the item specified is optional. The target program represents the device driver or other program you are loading. The last item shows the placement of options for the target program if there are any. Now that we know where LOADHl's options belong on the command line, we also need to know what an option looks like. O A LOADHI option always begins with a slash (/). O Following the slash is the option name, or its abbreviation. O If the option can take a value, then the next character must be a colon (:) followed by the value. One LOADHI option is LARGEST, which optionally can take a value. You can indicate this option in any of the following ways: / LARGEST /L /LARGEST:2 / L:2 In all, there are thirteen options you may specify on a LOADHI command line, each of which are described below. Combinations of two or more options may be specified to give you greater control over the use of high RAM. These paragraphs show: the full option name followed by its abbreviation. If a value is called for that is optional it is enclosed in square brackets ([ ]). The options are: O /BESTFIT or /B instructs LOADHI to use the smallest block of memory in which the program fits. Using BESTFIT tends to reserve larger regions for your larger programs. See also SIZE and GETSIZE. U /HAPPIEST or /H instructs LOADHI to use the smallest block of memory in which the program will fit, provided that it does not terminate with an 34 CHAPTER 5: THE LOADHI PROGRAMS error. Both device drivers and TSRs return after they are initialized, and the LOADHI programs can determine if the load was successful. It it was not, then LOADHI will try again with the a larger area until the program exits successfully. If necessary the program will be loaded in conventional memory. O /REGION:n or /R:n instructs LOADHI to load the program into the region numbered "n". O /LARGEST[:n] or /L[:nl instructs LOADHI to load the program into the largest region or one particular region out of several large regions avail- able. The number indicated by n indicates which of these to use. For in- stance the option /L:2 specifies the second largest region. O /SMALLEST[:n] or /S[:n] instructs LOADHI to load the program into the smallest region or one particular region out of several small regions avail- able. The number indicated by n indicates which of these to use. For in- stance the option /S:2 specifies the second smallest region. O /EXCLUDEREGION:n or /XR:n instructs LOADHI to not use region num- ber n to load the target program. O /EXCLUDELARGEST[:n] or /XLl:nl instructs LOADHI to not use the largest region (or the Nth largest region) to load the target program. O /EXCLUDESMALLEST[:n] or /XSl:n] instructs LOADHI to not use the smallest region (or the Nth smallest region) to load the target program. O /GETSIZE[:f] or /GS[:f] allows you to determine precisely the amount of memory a program requires. With this option LOADHI loads the program you specify and reports two memory usage values. The first value tells you how much memory (in bytes) the program required to load and ini- tialize. The second value tells you the amount of memory the program has permanently retained for its own use. You use this option to help you custom fit your device drivers and TSRs into high RAM. The optional value f should be a file name. When a file name is present, LOADHI writes the program name and the two size values into this file so that you may examine it later. If the file name you specify already ex- ists, LOADHI appends the information to this file. By systematically using the GETSIZE option with a file name you can compile the memory re- quirements of all the programs you wish to relocate to high RAM. This is the procedure that the Optimize program uses. NOTE to DESQview users: LOADHI /GETSIZE can be used to help you determine how much memory a program requires to run, so you can properly set an appropriate memory size. Simply run the program you are interested in in a maximum memory window with LOADHI /GS. Do what you would normally do in the program. When you exit it, LOADI 11 displays the amount of memory that the program used. That number (in- 35 CHAPTER 5: THE LOADHI PROGRAMS creased slightly) can be used for the memory configuration for that pro- gram. Cl /SIZE:nnnn or /SIZE:nnnnK instructs LOADHI to allocate from a block that will best fit the value nnnn. This number can be expressed in bytes (i.e 4096) or in kilobytes (i.e. 4K). The number you supply may come from the report issued by the GETSIZE option, or a number that you have determined by other means. In either case this number must represent the amount of memory the program nceds to successfully initialize. O /NOLO or /NL instructs LOADHI to not load the specified program at all if it will not fit in a high RAM region. This allows you to specify addition- al drivers, TSRs or DOS resources, that you would like to use, but only if they will be placed in high RAM O /LO or /LO instructs LOADHI to unconditionally use conventional memory instead of high RAM. You can use this option to temporarily change LOADHI statements in CONFIG.SYS or AUTOEXEC.BAT files without removing them completely. O /TERMINATERESIDENT or /TSR instructs LOADHI to terminate as a TSR, leaving a small stub of code (about 100 bytes) resident. This option is only useful if you are using LOADHI in combination with DOS 4's IN- STALL command in CONFIG.SYS. In this case, the effect of this option is simply to suppress an error message issued by DOS indicating a failure to load a TSR when in fact LOADHI successfully relocated the program. Finally, as a quick reminder, LOADHI will also respond to the following op- tions on its command line: :0 /NOPAUSEONERROR or NOPE instructs LOADI 11 not to pause on error. O /PAUSE instructs LOADHI to pause while parsing commallds. O /HELP displays the LOADHI help scree 1_1 /? Iists all LOADHI command svvitclles. 36 CHAPTER ~: THE LOADHI PROGRAMS The DOS Resource Programs let you manage the data structures used by DOS. You may use thesc programs by tllemselves, either to determine the cur- rent memory used or to add resources out of conventional memory. Their use with the LOADHI programs will benefit you the most. DOS always allocates memory for each resource. The amount allocated varies according to the DOS version. Earlier versions of DOS do not have support for some of the resources. Users increase the memory for a resource by including a statement in their CONFIG.SYS file. DOS reads and processes this file during its boot sequence. This chapter discusses each of the DOS resource allocation programs. Each DOS resource is described briefly. Changes or additions to your CONFIG.SYS and AUTOEXEC.BAT files are given where needed. This information should also help those of you who are taking advantage of increasing these DOS resources for the first time. The programs described in this chapter are all used in mucll the same way. Running the program without any parameters gives you a report on the cur- rent memory allocation for the resource. All programs accept a numeric parameter which increases the memory available to DOS for that resource. And each allocates this additional memory from high RAM when you use LOADHI. To use high RAM effectively, you c11ange CONFIG.SYS to reduce the memory allocation. You then c~lange AUTOEXEC.BAT to increase the resource. The parameters these programs use share a common syntax. A number, or a number preceded by an equals sign (nn or =nn), gives the total number of data structures needed. A number preceded by a plus sign (+nn), adds that many more structures. All the programs add memory; you cannot use them to reduce the memory allocated to a resource. The DOS buffers resource can improve disk 1/0 response times. DOS always has some number of disk sector buffers allocated. The default number varies, according to the version of DOS, from 2 to 15 buffers. You can add more buf- fers with a statement in your CONFIG.SYS file. For example, the statement, BUFFERS=30, allocates space for a total of thirty sector buffers. Each sector buffer requires 528 bytes of memory. NOTE: Don't use BUFFERS.COM in DOS 4.0 systems. The structure of the disk buffers is different. Without the services of BUFFERS with LOADHI, buffers are allocated out of conventional memory. Adding buffers can improve program response time but reduces the memory available to your application.s. Also, one application may benefit from sector buffering while another is unaffected. Much depends upon how they access the files they use. Having your disk buffers allocated out of high RAM can, therefore, keep the benefits of disk buffering and avoid the associated penalty. 37 CHAPTER 6: THE DOS RESOURCE PROGRAMS You can display a report of the number of buffers now allocated: ùType BUFFERS and press ~. The prograrn responds by reporting " BUFFERS=30 now". To load 30 buffers in High RAM: ùType LOADHI BUFFERS +30 and press ~. The program responds by reporting: BUFFERS=30 before 30 buffers added BUFFERS=60 now If you have a BUFFERS=statement in your CONFIG.SYS file, we recommend loading your buffers in high memory. Let's assume for our example that you have previously determined that you require 40 disk buffers, so CONFIG.SYS file now contains the statement, BUFFERS=40. To load these in high memory: ù First change the BUFFERS statement in your CONFIG.SYS to BUFFERS=1. This specifies a small number of buffers to override any default DOS alloca- tion. If you simply remove this statement from CONFIG.SYS you may end up with as many as fifteen disk buffers allocated out of conventional memory. ù Next change your AUTOEXEC.BAT file so the first statement is LOADHI BUFFERS=40 or +39. NOTE: Make it the first statement so other AUTOEXEC.BAT statements can take advantage of disk buffering. DOS uses the files resource to keep track of disk files while they are open. The files resource is a data structure requiring about 53 bytes for each open file. This data structure is closely related to a DOS file handle, so that term is used here. The default number of file handles DOS allocates is small and seldom enough. Many of the larger applications require more. A program such as DESQview, which allows multiple programs to be running concurrently, requires at least this much. Depending on the active applications, DESQview may require even more. It is quite likely that you already have a FILES= statement in your CON- FIG.SYS file. FILES=20 is a common setting. You can display a report of the number of files now allocated: ùType FILES and press ~. The program responds by reporting "FILES=20 now". To add 20 files in high memory: 3X CHAPTER 6: THE DOS RESOURCE PROGRAMS ùType LOADHI FILES +20 and press The program responds by reporting: FILES=20 before 20 files added FILE5=40 now Whether you do or do not currelltly have a FILES= statcmellt in your CONFIG.SYS file, we recommend loading files in higll memory Let's aSSUllle for our example that you have previously determined that you require 3() files, so your CONFIG.SYS file now contaills the statemellt, Fll ES=30. To load FILES in high memory: ùChange the FILES statement in your CONFIG.SYS file to FILES=10. This statement allocates 10 file handles. This numbcr puts only a small burden on the use of conventional memory, while avoiding problems with certain ap- plications. ùAdd the statement, LOADHI FILES=40 in your AUTOEXEC.BAT file. DOS uses the FCB resource to keep track of File Control Blocks (FCBs). Ver- sions of DOS prior to DOS 2.0 used FCBs exclusively to open and manage open disk files. Since DOS 2.0, the preferred method of filc access involves the use of file handles. Because many programs written before DOS 2.0 are still in use, the use of FCBs is still supported. Skip this section if you are not using Sl-lARE alld do not have an FCBS state- ment in your CONFIG.SYS file. Also, this resource is not available in DOS ver- sion 2 systems. The FCB management by DOS involves two numbers. The first number in- structs DOS to allocate memory for that many FCBs. The second number indi- cates how many of those FCBs should be protected when DOS needs to close an open FCB. Each FCB resource allocated requires about 53 bytes. NOTE: The FCB resource uses contiguous memory. When you add FCBs, a new block of memory for the entire table must be allocated. The memory used by the original table is not recovered. You can display a report of the number of files now allocated: ùType FCBS and press ~. The program responds by reporting "FCBS=4,0 now". To add to add 4 more FCBs, with 2 additional FCBs protected. ùType LOADHI FCBS +4~2 and press ~. The program responds by reporting: 39 CHAPTER 6: THE DOS RESOURCE PROGRAMS FCBS=4,0 before 4 FCBs added 2 protected FCBs added FCBS=8,2 now If you currently have a FCBS= statement in your CONE11G.SYS file, we reco~ mend loading FCBS in high memory. Let's assume for our example that you have previously determined that you require ~,2 FCBS, so your CONFIC..SYS file now contains the statement, FCBS=8,2. To load FCBS in l-igh memory: I ù Remove the FCBS= statement in your CONFIG.SYS ù Add the statement, LOADHI FCBS 8,2, to your AUTOEXEC.BAT file. DOS uses the last drive resource to support both physical alld logical disk drives. Logical disk drives are useful if you use the vos SUBST program. Each drive entry in DOS' drive tablc requires about S(~ bytes. You can add drive table support using the numerical par~lmeters you'rt~ Seell throughout this section or you can set it using a drive letter. NOTE: The DOS drive table uses contiguous memory. Whell you add more drives, a new block of memory for the entire tablc m~lst be allocated. The memory used for the original drive table is not recovered. You can display a report of the number of files no~ allocated: ùType LASTDRIVE and press ~. The program responds by reporting: LASTDRIVE=E now To load a new drive table in high RAM: ùType LOADHI LASTDRIVE G and press ~. The program responds by reporting: LASTDRIVE=E before 2 drives added LASTDRIVE=G now We recommend that you change your LASTDRIVE= st~temellt in CON- FIG.SYS so only your actual disk volumes are specified (For example, LASTDRIVE=D). If your hard disk is partitioned, tht~ drivt~ letter should cor- respond to the last partition. This minimizes tht~ "lost" melllory. Tht~ll load lo~i- cal drives in high memory. For example to add three loxicLll drives: ùAdd the statement, LOADHI LASTDRIVE=+3, to your AUTOEXEC.BAT file. 40 CHAPTER 6: THE DOS RESOURCE PRoGRAM~ The VIDRAM.COM program extends the conventional memory managed by DOS by 96K if your system has an EGA or VCA video adapter card. Your rc must also already have a full 640K of conventional memory alld the program or programs you intend to execute with this additional memory must not ~ISe graphics while VIDRAM is enabled. In othcr words, VIDRAM Call be of use to you if you make use of large text based programs, such as dBASE IV, that will be more responsive in a 736K machille. VIDRAM is a standalone TSR. It does not need any expallded memory, ex- tended memory or a memory manager (other than itsclf and DOS). If your system has the necessary video RAM, VIDRAM will work equally well 011 8088, 8086, 80286 and 80386 machincs. If you do have additional memory alld a memory manager that can make this memory available to you, VIDRAM may not be useful to you. VIDRAM steals the video memory from the adapter KAM tl-at is used for graphic pages. This memory is av~ilablc on ECA and VGA adapters, (not on CGA or monochrome adapters) and lies just bcyond the ~4()K address bound- ary. VIDRAM makes this memory available to DOS. DOS in turn will m~lke the memory available to every program it loads. VIDRAM also intercepts video requests and refuses all requests that would make use of this memory~ i.e. graphics operations. If you routinely use both large text based programs and graphics programs, you can turn the VIDRAM feature off and on as needed after you exit one pro- gram and before you execute the other. (NOTE: VIDRAM canllot be turlled on and off inside DESQview). If you seldom use graphics programs you can mak- the best use of VIDRAM if you simply load it into memory and turll it ON every time you power Up your machine. To do this you need to create or modify your AUTOEXEC.BAT file, adding the statement: VIDRAM ON This brings VIDRAM into memory and makes the additiollal 9(~K of melllory available to all of the applications you may run througllout the day. The ON parameter on the command line is all option. VIDRAM hcls severlll options which it will recogni7.e, including the options whicll all the prograllls in the QEMM package support. In this sectioll, wllell all option is first Illell- tioned, the alternate abbreviated form of th.' option will immediately follow it and is enclosed in parantheses. You will need to understand what these options do if: l~ you want to know the status of VIDRAM :~ you need to run graphics programs occassionally CHAPTER 7: THE VIDRAM PRo(,RAM 1~ you have a second video adapter and monitor O you also have expanded or extended memory and a memory manager that also is managing the video RAM memory area To determine the current status of VIDRAM, you need to enter just the VIDRAM command (no option) from the DOS prompt: ùTYPE VIDRAM and press ~. The VIDRAM program reports whether or not VIDRAM is resident and enabled. For example, when VIDRAM is not resident, it reports: NOT Resident - Graphics enabled If VIDRAM is resident and turned on, then the following is displayed: Memory Extended to B800 - Graphics Disabled This shows you that DOS will see the additional 96K of memory (to hexadecimal address B800) and reminds you that graphic capabilities are not available. To turn the VIDRAM function OFF (OF), and return the 96K of memory for use by the graphics adapter, you would enter the following command from the DOS prompt: ùType VIDRAM OFF and press ~. The VIDRAM program will respond with a display which shows that graphics are now enabled: Memory NOT Extended - Graphics Enabled There are two parameters you can use that inhibit graphics functions but which do not extend your memory. You use these when you have a memory manager that already is including this memory and you want to prevent graphics programs from using the memory. ùType VIDRAM NOEGA and press ~. to prevent EGA requests from being honored. ùType VIDRAM NOCGA and press ~. to prevent a~y graphics function (CGA through VGA). The last VIDRAM specific option is used to force the VIDRAM function ON in situations where VIDRAM would normally refuse to appropriate the video RAM memory. These situations occur when you have two monitors and two video adapters in your system, or when all or part of the video RAM is al- ready being managed by a resident memory manager. 42 CHAPTER 7: THE VIDRAM PROGRAM This option is the OVERRIDE (OV or OR) option. It may not work well for you in either of these situations, for it depends upon what adapters may be in- volved or what memory management features you may already be using. You will simply have to determine for yourself VlDRAM's utility in this situa- tion. To use the OVERRIDE option, you would enter the following command from the DOS prompt: ùType VIDRAM ON OVERRIDE and press ~. The VIDRAM program will respond with a display like the following ex- ample, which shows that memory has been extended and that graphics are now disabled. Memory Extended to BOOO - Graphics Disabled Notice also in this example, that VIDRAM has not made the entire 96K extent of video RAM available. The example was taken on a system with both a VGA and a monochrome video adapter present. Leaving enough video RAM to support both monitors in their text modes, VIDRAM was able to extend DOS' conventional memory by 64K (the memory from hexadecimal addresses AOOO to BOOO). Finally, as a quick reminder, VIDRAM will also respond to the following op- tions on its command line: 1~ NOPAUSEONERROR (NOPE) tells VIDRAM to not pause on error. [~ PAUSE tells VIDRAM to pause while parsing commands. 3 HELP displays the help screen for VIDRAM. l~ ? Iists all commands. You can use the LOADHI program (Chapter 5) with VIDRAM to make the resident portion of VIDRAM remain in higll RAM. VIDRAM resident in high RAM cannot, however, extend the memory To extend the mcmory, you must run VIDRAM a second time. For example: ùTYPE LOADHI VIDRAM ON and press ùTYPE VIDRAM ON and press ~. This allows the code that intercepts graphics requests to be in high RAM, while the memory management portion is in memory only briefly while it ex- tends or returns memory. 43 CHAPTER 7: THE VIDRAM PRoC,RAM This chapter describes two othcr QEMM programs, EMS2EXT and EMS, which give additional control over expanded mcmory. Thcsc two programs can be used separately or thcy can bc used together to give you some dynamic control over your cxtcnded memory allocation. If your system has EMS 4.0 expanded mcmory, but not extclldcd memory, you may want to use the EMS2EXT.SYS dcvicc driver supplicd with QEMM. EMS2EXT can supply expanded memory as extcnded memory to programs that access extcnded memory in a certain prcscribed ma~ cn Two SUCh programs are IBM's DisplayWrite and thc VDISK.SYS RAM disk utility sup- plied with DOS. Many disk cache utilities oftcn use extended mcmory in this way also. These and other programs can be used with EMS2EXT.SYS because they do not require that extendcd memory (memory abovc 1024K) be physically present, nor do they need to directly address this memory. They make demands upon this memory in a logical as opposed to a physical sense. And they access the contents of this memory througll request.s of a memory manager, which makes this memory available to the program. Programs which make use of extended memory in this way provide a performance boost over programs that rely on disk storage alonc, since the in-mcmory transfer is much faster. Programs that expect extended memory to be physically prcsent cannot make use of EMS2EXT. Quarterdeck's QEXT.SYS driver, uscd with DESQview, cannot use memory supplied by EMS2EXT. Because this logical or virtual memory capability cnhances a programs perfor- mance, you should have little difficulty in detcrmining which of your applica- tions support this memory. They will surely mention it. And, if your comple- ment of expanded memory lends itself to this use, you will want to makc this memory available to thesc programs. If you decide to use EMS2EXT you may also want to consider the relative speed of the various types of memory you have in your system. It is possible for there to be a significant speed differential betwcen these types of memory. EMS2EXT is capable of determining this difference and can allocate either slow memory or fast memory for use as extended memory. EMS2EXT is a device driver and therefore needs to be loaded when your sys- tem boots up. This requires a DEVICE= statement in your CONFIG.SYS file. When you have determined the amount of memory to ask EMS2EXT to manage as extended memory, you need to modify CONFIC.SYS to load EMS2EXT. The statement to load EMS2EXT must come after the one that loads your expanded memory manager and looks likc: DEVICE=C:\QEMM\EMS2EXT.SYS MEMORY=NNN SPEED Several components of this statement need to be explaincd. 4S CHAPTER ~: OTHER QEMM-~6 PROCiRAMS The nnn paramcter in MEMORY=nnn is the number of kilobytes of ex- panded memory to allocate, i.e. MEMORY=512. This is optional. The speed parameter is the optional specification for using faster or slower mcmory for allocation. Lcave this part of the linc blank or use either, FAST or SLOW. The EMS programs providc a number of informativc and powerful func- tions to help you make the best usc of your EMS 4.() expanded mcmory where you might have special or unusual requircmcnts. Although anyonc might bcnefit from the EMS summary status report and othcrs by seeing tht~ detail of expanded memory allocation, other uses of EMS whicll will be described in these sections are for thc morc technically minded. Most of the functions of the two EMS programs, EMS.SYS and EMS.COM, involve the manipulation of expanded memory handles. An EMS handle is a reference to a block of memory (~ero or more EMS pages) that the expanded memory manager issues whcn it allocates memory. A handle is represented by a number and it may be given a name. An expandcd memory handle, its name, and the pages of memory as- sociated with the handle are the fnndamental tokens of interaction between an application program and an expanded memory manager. The two EMS programs give you some of the same control functions availablc to programs. The principal need for caution when using the EMS programs arises because they give you access to handles which may belollg to other programs and EMS will not prevent you from inadvertent mischief making. With the EMS programs you can allocate and namc a block of memory with the CREATE option, and specify that the memory be fast or slow mcmory. You can free expanded memory pages allocated to a handlc with the FREE option. You can read data from a file into allocated expanded memory or write the data from allocated expanded memory to a file with the LOAD or SAVE options. An EMS handle can be renamed, and the number of memory pages can be changed. Along with the report features of EMS you can experiment with the func- tions using EMS as a command line interface to the expandcd memory manager. If parts of the expanded memory in your system runs at different speeds, you can use EMS to pre-allocate memory of one speed before you load a device driver or TSR so that it can only use the memory that rernains at thc other speed; and you can then free the memory for use by your other ap- plications. Manifest can show you if your memory runs at differellt rates. Developer's using expanded mcmory may make use of the LOAD and SAVE function to help them when they need to work with the same context repeatedly during development and debugging. 46 CHAPTER ~: OTHER QEMM-~6 PROGRAMS All of these uses of EMS require an cxtensive knowledge of the various aspects of your system, from the details involved in thc DOS boot scqucnce, to uses and capabilites of expandcd and extended memory as well as an Ull- derstanding of the applications you are attempting to colltrol and optimii~.e. Both EMS.SYS and EMS.COM respond to thc same commalld linc options. You use EMS.SYS from within the CONFIG.SYS file to manipulatc expallded memory during the system boot sequence. You use EMS.COM from within the AUTOEXEC.BAT file at the end of the boot scquence or directly from DOS prompt as needed. Described below are the command line options of EMS alld the paramctcrs required by each option. Some of the options havc an abbreviated form. Where this is the case, the alternate form is shown immediately following the option when it is first introduced, and is enclosed in parentheses. To get a summary report of your expanded memory, you issue the EMS com- mand from the command line without any option specified. EMS outputs the following information. O the total amount of expandcd memory, and O the amount currently available, and O the address of the Page Frame. The DIR option displays, in tabular form, a breakdown of thc current ex- panded memory allocated. For each allocated handle, the number of ex- panded memory pages is given, the number of kilobytcs of memory thosc pages represent, and the name assigned to that handle, if any. The CREATE (CR) option is used to allocate pages of expanded mcmory. Tt takes two parameters. CREATE requires that you providc a name for the memory you are allocating and that you specify the amount of memory. The name may be one to eight characters long. The name nccd not be enclosed in quotation marks unless it contains blanks. The amount of memory you arc al- locating may be expressed in EMS pages (16K per page) or in kilobytes. If you specify the number of kilobytes, thc memory manager will round the number up if necessary to determine the number of pages. Follow the EMS CREATE command with EMS DIR command to confirm the allocation and to determine the handle number assigned to the name. The CREATEFAST (CFAST) and CREATESLOW (CSLOW) options are forms of the CREATE option that also instruct the memory manager to allo- cate the memory from either faster or slower memory. I]sc Manifest's Memory Timings to determine if this form of CREATE is important to you. The FREE option frees memory and deallocates a handle. FREE requires that you specify the handle to deallocate--by its name or its number. 47 CHAPTER 8: OTHER QEMM-386 PROGRAMS The RENAME (REN) option lets you assign a new name to a halldle The first argument to RENAME is the original handle. You may refer to this hand- le by its number or its name. The second argument is the new handle name. The RESIZE (RES) option lets you increase or decreasc thc number of pagts assigned to a handle. Its two arguments are the same as those of CREATE. The SAVE option allows you to savc the contents of thc t~xpanded memory pages associated with an EMS handle to a file. This option rcquires that you also specify the handle namc (or number) and the file name. The LOAD option allows you to restore the contents of expanded mcmory pages that have been stored in a file. This option requires that you also specify the handle name (or number) and the file name which contains the data you want to restore. The number of pages required will be automatically allocated based on the files size. The EMS programs also respond to the options common to all the programs supplied with your QEMM-386 programs: O NOPAUSEONERROR (NOPE) instructs EMS not to pause on error. Ll PAUSE instructs the program to pause while parsing commands. O HELP displays EMS help tcxt. O ? Iists all EMS command paramcters. You can load EMS2EXT as described in the EMS2EXT section of this chapter, but without specifying any memory parameter at all. EMS2EXT will be resi- dent, but it will not allocate any mcmory. It will, howcver, recognize as its memory a handle with the name "EM52EXT". You can then, as needcd, cre- ate, grow, or shrink the amount of extendcd memory for this handle using EMS.COM. This capability should only be used in special situations when you know how and when the program will use extended memory. For instance, a pro- gram could be given extended memory only while it is running. You could make a batch file wich ran EMS CREATE "EMS2EXT" 128K bcfore running the application. When the program terminates, allotller EMS statemcnt could frec thc m(~m(lry 4X CHAPTER X: OTHER QEMM-~.ts~6 PROGRAMS